Semigroup - Wikipedia